comparison cbackend.js @ 265:d6a4c9e7716e

Remove remapping of most operators
author Michael Pavone <pavone@retrodev.com>
date Mon, 14 Jul 2014 19:03:46 -0700
parents 2557ce4e671f
children 75dc7161c1ca
comparison
equal deleted inserted replaced
264:cba0cb39517a 265:d6a4c9e7716e
13 return methodIds[methodName]; 13 return methodIds[methodName];
14 } 14 }
15 15
16 function getOpMethodName(opname) 16 function getOpMethodName(opname)
17 { 17 {
18 var optoMeth = {'+': 'ADD_', '-': 'SUB_', '*': 'MUL_', '/': 'DIV_', '%': 'MOD_', 18 var optoMeth = {'&&':'if', '||':'ifnot'};
19 '=': 'EQ_', '!=': 'NEQ_', '<': 'LT_', '>': 'GT_', '>=': 'GEQ_', '<=': 'LEQ_',
20 '.': 'CAT_', '&&':'if', '||':'ifnot', '|': 'CONS_'};
21 if (opname in optoMeth) { 19 if (opname in optoMeth) {
22 return optoMeth[opname]; 20 return optoMeth[opname];
23 } else { 21 } else {
24 return opname; 22 return opname;
25 } 23 }
609 }); 607 });
610 me.addImport(importsyms, messages[i].args[1]); 608 me.addImport(importsyms, messages[i].args[1]);
611 } else if(messages[i].name == 'llProperty:withType:' && messages[i].args.length == 2) { 609 } else if(messages[i].name == 'llProperty:withType:' && messages[i].args.length == 2) {
612 me.addProperty(messages[i].args[0].name, null, messages[i].args[1].toCTypeName()); 610 me.addProperty(messages[i].args[0].name, null, messages[i].args[1].toCTypeName());
613 } else if(messages[i].name == 'llMessage:withVars:andCode:' && messages[i].args.length == 3) { 611 } else if(messages[i].name == 'llMessage:withVars:andCode:' && messages[i].args.length == 3) {
614 var msgname = messages[i].args[0].name 612 if (messages[i].args[0] instanceof symbol) {
613 var msgname = messages[i].args[0].name;
614 } else if (messages[i].args[0] instanceof strlit) {
615 var msgname = messages[i].args[0].val;
616 } else {
617 throw new Error('First argument to llMessage:withVars:andCode must be a symbol or string');
618 }
615 var rawvars = messages[i].args[1].expressions; 619 var rawvars = messages[i].args[1].expressions;
616 var vars = {}; 620 var vars = {};
617 for(var v in rawvars) { 621 for(var v in rawvars) {
618 vars[rawvars[v].symbol.name] = rawvars[v].expression.toCTypeName(); 622 vars[rawvars[v].symbol.name] = rawvars[v].expression.toCTypeName();
619 } 623 }
672 function makeInt(bits, unsigned) 676 function makeInt(bits, unsigned)
673 { 677 {
674 var typename = 'obj_' + (unsigned ? 'u' : '') + 'int' + bits; 678 var typename = 'obj_' + (unsigned ? 'u' : '') + 'int' + bits;
675 var intObj = new cObject(typename); 679 var intObj = new cObject(typename);
676 intObj.addProperty('num', null, (unsigned ? 'u' : '') + 'int' + bits +'_t'); 680 intObj.addProperty('num', null, (unsigned ? 'u' : '') + 'int' + bits +'_t');
677 addBinaryOp(intObj, 'ADD_', '+', typename); 681 addBinaryOp(intObj, '+', '+', typename);
678 addBinaryOp(intObj, 'SUB_', '-', typename); 682 addBinaryOp(intObj, '-', '-', typename);
679 addBinaryOp(intObj, 'MUL_', '*', typename); 683 addBinaryOp(intObj, '*', '*', typename);
680 addBinaryOp(intObj, 'DIV_', '/', typename); 684 addBinaryOp(intObj, '/', '/', typename);
681 addBinaryOp(intObj, 'MOD_', '%', typename); 685 addBinaryOp(intObj, '%', '%', typename);
682 addBinaryOp(intObj, 'or', '|', typename); 686 addBinaryOp(intObj, 'or', '|', typename);
683 addBinaryOp(intObj, 'xor', '^', typename); 687 addBinaryOp(intObj, 'xor', '^', typename);
684 addBinaryOp(intObj, 'and', '&', typename); 688 addBinaryOp(intObj, 'and', '&', typename);
685 addBinaryOp(intObj, 'lshift:by', '<<', typename); 689 addBinaryOp(intObj, 'lshift:by', '<<', typename);
686 addBinaryOp(intObj, 'rshift:by', '>>', typename); 690 addBinaryOp(intObj, 'rshift:by', '>>', typename);
687 addCompOp(intObj, 'LT_', '<', typename); 691 addCompOp(intObj, '<', '<', typename);
688 addCompOp(intObj, 'GT_', '>', typename); 692 addCompOp(intObj, '>', '>', typename);
689 addCompOp(intObj, 'EQ_', '==', typename); 693 addCompOp(intObj, '=', '==', typename);
690 addCompOp(intObj, 'NEQ_', '!=', typename); 694 addCompOp(intObj, '!=', '!=', typename);
691 addCompOp(intObj, 'GEQ_', '>=', typename); 695 addCompOp(intObj, '>=', '>=', typename);
692 addCompOp(intObj, 'LEQ_', '<=', typename); 696 addCompOp(intObj, '<=', '<=', typename);
693 intObj.addInclude('<string.h>'); 697 intObj.addInclude('<string.h>');
694 //-9223372036854775808 698 //-9223372036854775808
695 //01234567890123456789 699 //01234567890123456789
696 intObj.addMessage('string', { 700 intObj.addMessage('string', {
697 vars: {str: 'string *'}, 701 vars: {str: 'string *'},