|
|
@ -1,6 +1,6 @@ |
|
|
|
# minproto.leg -- minimal prototype langauge for semantic experiments |
|
|
|
# |
|
|
|
# last edited: 2024-05-18 08:41:26 by piumarta on zora |
|
|
|
# last edited: 2024-05-21 08:45:20 by piumarta on zora |
|
|
|
|
|
|
|
%{ |
|
|
|
; |
|
|
@ -108,8 +108,6 @@ oop printOn(oop buf, oop obj, int indent); |
|
|
|
doProtos(declareProto); |
|
|
|
#undef declareProto |
|
|
|
|
|
|
|
#if TYPECODES |
|
|
|
|
|
|
|
#define declareTypecode(NAME) t##NAME, |
|
|
|
enum typecode { |
|
|
|
UNDEFINED_TYPECODE, |
|
|
@ -117,8 +115,6 @@ enum typecode { |
|
|
|
}; |
|
|
|
#undef declareTypecode |
|
|
|
|
|
|
|
#endif // TYPECODES |
|
|
|
|
|
|
|
#define makeProto(NAME) oop p##NAME = 0; |
|
|
|
doTypes(makeProto); |
|
|
|
#undef makeProto |
|
|
@ -1178,7 +1174,7 @@ oop storeOn(oop buf, oop obj, int indent) |
|
|
|
break; |
|
|
|
} |
|
|
|
case Object: { |
|
|
|
String_append(buf, '[';); |
|
|
|
String_appendAll(buf, "[";); |
|
|
|
oop *elts = _get(obj, Object,indexed); |
|
|
|
int size = _get(obj, Object,isize); |
|
|
|
int i = 0; |
|
|
@ -1187,14 +1183,17 @@ oop storeOn(oop buf, oop obj, int indent) |
|
|
|
codeOn(buf, elts[i], indent); |
|
|
|
++i; |
|
|
|
} |
|
|
|
struct property *kvs = _get(obj, Object,properties); |
|
|
|
size = _get(obj, Object,psize); |
|
|
|
oop names = sortObject(keys(obj, indent > 0), "print"); |
|
|
|
size = _get(names, Object,isize); |
|
|
|
elts = _get(names, Object,indexed); |
|
|
|
for (int j = 0; j < size; ++j) { |
|
|
|
if (kvs[j].key == prop_delegate && kvs[j].val == pObject) continue; |
|
|
|
oop key = elts[i]; |
|
|
|
oop val = Object_getLocal(obj, key); |
|
|
|
if (key == prop_delegate && val == pObject) continue; |
|
|
|
if (i++) String_appendAll(buf, ", "); |
|
|
|
codeOn(buf, kvs[j].key, indent); |
|
|
|
codeOn(buf, key, indent); |
|
|
|
String_appendAll(buf, ": "); |
|
|
|
codeOn(buf, kvs[j].val, indent); |
|
|
|
codeOn(buf, val, indent); |
|
|
|
} |
|
|
|
String_append(buf, ']'); |
|
|
|
break; |
|
|
@ -3062,7 +3061,7 @@ enum typecode getTypecode(oop exp) |
|
|
|
return is(Symbol, name) ? _get(name, Symbol,typecode) : UNDEFINED_TYPECODE; |
|
|
|
} |
|
|
|
|
|
|
|
#else // !TYPECODES |
|
|
|
#endif // !TYPECODES |
|
|
|
|
|
|
|
#define defineEval(NAME) \ |
|
|
|
static inline oop prim_##NAME##_eval(oop func, oop exp, oop args, oop env) { \ |
|
|
@ -3073,8 +3072,6 @@ doProtos(defineEval) |
|
|
|
|
|
|
|
#undef defineEval |
|
|
|
|
|
|
|
#endif // !TYPECODES |
|
|
|
|
|
|
|
#define defineCodeOn(NAME) \ |
|
|
|
static inline oop prim_##NAME##_codeOn(oop func, oop exp, oop args, oop env) { \ |
|
|
|
NAME##_codeOn(exp, getArgType(args, 0, String, #NAME".codeOn"), env); \ |
|
|
@ -3440,13 +3437,14 @@ int main(int argc, char **argv) |
|
|
|
|
|
|
|
# define defineEvaluator(NAME) \ |
|
|
|
_set(intern(#NAME), Symbol,typecode, t##NAME); |
|
|
|
#else // !TYPECODES |
|
|
|
|
|
|
|
# define defineEvaluator(NAME) \ |
|
|
|
Object_put(p##NAME, prop_eval, newPrimitive(prim_##NAME##_eval, newString(#NAME".__eval__"))); |
|
|
|
# undef defineEvaluator |
|
|
|
|
|
|
|
#endif // !TYPECODES |
|
|
|
|
|
|
|
# define defineEvaluator(NAME) \ |
|
|
|
Object_put(p##NAME, prop_eval, newPrimitive(prim_##NAME##_eval, newString(#NAME".__eval__"))); |
|
|
|
|
|
|
|
doProtos(defineEvaluator); |
|
|
|
|
|
|
|
# undef defineEvaluator |
|
|
|