LINUX.ORG.RU

ecl компиляция

 ,


0

3

Столкнулся с проблемой в ecl, которая вылезает при компиляции в нативный код, а в интерпретаторе ее не вылезает. Если исходник выглядит так:

(let ((a (read))
      (b (read)))
      (print (+ a b)))
(quit)
то все работает хорошо, если же добавить в начало вывод строки:
(print "введите А и Б")
(let ((a (read))
      (b (read)))
      (print (+ a b)))
(quit)
то при запуске получаю:
Unexpected end of file on #<string-input stream from "\"†2†2...">.
No restarts available.

Top level in: #<process TOP-LEVEL>.
>
Помогите разобраться.

★★★★★

Ответ на: комментарий от buddhist
$ ecl
ECL (Embeddable Common-Lisp) 12.7.1 (git:UNKNOWN)
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2000 Juan J. Garcia-Ripoll
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help.  
Top level in: #<process TOP-LEVEL>.
> (print "введите А и Б")

"введите А и Б" 
"введите А и Б"
>
ados ★★★★★
()
Ответ на: комментарий от ados

да нет, похоже buddhist прав, если в начале проги делать вывод строки в латинице, то после компиляции все работает норм. Как эту хню с кириллицей пофиксить?

Aswed ★★★★★
() автор топика

юникод не понимает

Шел XXI век.

ЛNСП™! Глобально и Надежно®!

anonymous
()
Ответ на: комментарий от Aswed

Какая смешная бага. :)

Пожалуйся в список рассылки или багтрекер, если ещё никто другой этого не сделал. Они как-раз в последнем релизе что-то исправляли со строками и, вполне вероятно, что-то сломали.

naryl ★★★★★
()
Ответ на: комментарий от ados

C файл:

/*	Compiler: ECL 11.1.1                                          */
/*	Date: 2012/12/31 13:09 (yyyy/mm/dd)                           */
/*	Machine: Linux 3.2.0-35-generic x86_64                        */
/*	Source: new.cl                                                */
#include <ecl/ecl-cmp.h>
#include "new.h"
	
#include "new.data"
#ifdef __cplusplus
extern "C"
#endif
ECL_DLLEXPORT void init_fas_CODE(cl_object flag)
{ VT1 VLEX1 CLSR1 STCK1
	const cl_env_ptr cl_env_copy = ecl_process_env();
	cl_object value0;
	cl_object *VVtemp;
	if (!FIXNUMP(flag)){
	Cblock=flag;
	#ifndef ECL_DYNAMIC_VV
	flag->cblock.data = VV;
	#endif
	flag->cblock.data_size = VM;
	flag->cblock.temp_data_size = VMtemp;
	flag->cblock.data_text = compiler_data_text;
	flag->cblock.data_text_size = compiler_data_text_size;
	flag->cblock.cfuns_size = compiler_cfuns_size;
	flag->cblock.cfuns = compiler_cfuns;
	flag->cblock.source = make_constant_base_string("/home/algiz/coding/Lisp/new.cl");
	return;}
	#ifdef ECL_DYNAMIC_VV
	VV = Cblock->cblock.data;
	#endif
	Cblock->cblock.data_text = "@EcLtAg:init_fas_CODE@";
	VVtemp = Cblock->cblock.temp_data;
	ecl_print(VVtemp[0],Cnil);
	{cl_object V1;                            /*  LET0            */
	cl_object V2;                             /*  LET1            */
	V1= cl_read(0)                            /*  READ            */;
	V2= cl_read(0)                            /*  READ            */;
	T0= ecl_plus(V1,V2);
	ecl_print(T0,Cnil);
	}
	(void)si_quit(0)                          /*  QUIT            */;
}
h-файл:
#ifdef ECL_DYNAMIC_VV
static cl_object *VV;
#else
static cl_object VV[VM];
#endif

#ifdef __cplusplus
extern "C" {
#endif
#define VT1 cl_object T0;
#define VLEX1
#define CLSR1
#define STCK1
static cl_object Cblock;
#define VM1 1
#define VM 0
#define VMtemp 1
#ifdef __cplusplus
}
#endif
/*
 * Exported Lisp functions
 */
#define compiler_cfuns_size 0
#define compiler_cfuns NULL

data-файл:

static const char compiler_data_text[] = 
"\"\2062\2062\2065\2064\2070\2102\2065 \2020 \2070 \2021\") ";
#define compiler_data_text_size 17

Aswed ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.