implemented more prechecks including the existence of the primitive function handler and the number of supported arguments when compiling primitive method defintions
This commit is contained in:
		| @ -1,7 +1,7 @@ | ||||
| class _FFI(Object) from 'ffi' | ||||
| { | ||||
| 	method(#primitive) open(name). | ||||
| 	method(#primitive) close(). | ||||
| 	method(#primitive) close. | ||||
| 	method(#primitive) getsym(name). | ||||
| 	  | ||||
| 	(* TODO: make call variadic? method(#primitive,#variadic) call (func, sig). *) | ||||
|  | ||||
| @ -114,8 +114,7 @@ class MyObject(Object) | ||||
| 	method(#class) main_xx | ||||
| 	{ | ||||
| 		|a k| | ||||
| 		 | ||||
| 		 | ||||
|  | ||||
| 		'BEGINNING OF main...........' dump. | ||||
| 		a :=  | ||||
| 			if ([System logNl: 'xxxx'. 'abcd' == 'bcde'. false] value)  | ||||
| @ -270,6 +269,8 @@ class MyObject(Object) | ||||
| 	{ | ||||
| 		|a i| | ||||
|  | ||||
| ###self main_xx. | ||||
|  | ||||
| 		a := 100. | ||||
| 			## PROBLEM: the following double loop will exhaust the stack  | ||||
| 			(* | ||||
|  | ||||
| @ -99,6 +99,7 @@ class MyObject(Object) | ||||
| 			'too large array expression' | ||||
| 			'wrong primitive function number' | ||||
| 			'wrong primitive function identifier' | ||||
| 			'wrong primitive function argument definition' | ||||
| 			'wrong module name' | ||||
| 			'#include error' | ||||
| 			'wrong namespace name' | ||||
| @ -130,18 +131,15 @@ class MyObject(Object) | ||||
| 		]. | ||||
|  | ||||
| 		 | ||||
| 		f puts: S'static moo_ooch_t* '. | ||||
| 		f puts: name. | ||||
| 		f puts: S'[] =\n{\n'. | ||||
| 		f puts(S'static moo_ooch_t* ', name, S'[] =\n{\n'). | ||||
| 		0 to: c do: [:i | | ||||
| 			((i rem: 8) = 0) ifTrue: [ f putc: C'\t' ]. | ||||
| 			f puts: prefix. | ||||
| 			f puts: (i asString). | ||||
| 			(i = c) ifFalse: [f puts: S',' ]. | ||||
| 			(((i + 1) rem: 8) = 0) ifTrue: [ f putc: C'\n' ] ifFalse: [ f putc: C' ' ]. | ||||
| 			((i rem: 8) = 0) ifTrue: [ f putc(C'\t') ]. | ||||
| 			f puts(prefix, (i asString)). | ||||
| 			(i = c) ifFalse: [f puts(S',') ]. | ||||
| 			(((i + 1) rem: 8) = 0) ifTrue: [ f putc(C'\n') ] ifFalse: [ f putc(C' ') ]. | ||||
| 		]. | ||||
| 		(((c + 1) rem: 8) = 0) ifFalse: [ f putc: C'\n' ]. | ||||
| 		f puts: S'};\n'. | ||||
| 		(((c + 1) rem: 8) = 0) ifFalse: [ f putc(C'\n') ]. | ||||
| 		f puts(S'};\n'). | ||||
| 	} | ||||
|  | ||||
| 	method(#class) printString: s prefix: prefix index: index on: f | ||||
| @ -149,18 +147,13 @@ class MyObject(Object) | ||||
| 		| c  | | ||||
| 		c := s size - 1. | ||||
|  | ||||
| 		f puts: 'static moo_ooch_t '. | ||||
| 		f puts: prefix. | ||||
| 		f puts: index asString. | ||||
| 		f puts: '[] = {'. | ||||
| 		f puts('static moo_ooch_t ', prefix, index asString, '[] = {'). | ||||
|  | ||||
| 		0 to: c do: [:i | | ||||
| 			f putc: $'. | ||||
| 			f putc: (s at: i). | ||||
| 			f putc: $'. | ||||
| 			(i = c) ifFalse: [f putc: $, ]. | ||||
| 			f putc($', (s at: i), $'). | ||||
| 			(i = c) ifFalse: [f putc($,) ]. | ||||
| 		]. | ||||
|  | ||||
| 		f puts: S',\'\\0\'};\n'. | ||||
| 		f puts(S',\'\\0\'};\n'). | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user