changeset 121:1a4446f573d3

Add isInteger? method to the int32 type in the C backend
author Mike Pavone <pavone@retrodev.com>
date Thu, 01 Aug 2013 19:10:48 -0700
parents d5dc9507d612
children 9820ecd4eed4
files cbackend.js
diffstat 1 files changed, 21 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/cbackend.js	Wed Apr 17 23:56:55 2013 -0700
+++ b/cbackend.js	Thu Aug 01 19:10:48 2013 -0700
@@ -7,7 +7,7 @@
 {
 	if (!(methodName in methodIds)) {
 		methodIds[methodName] = nextmethodId++;
-		
+
 	}
 	return methodIds[methodName];
 }
@@ -41,7 +41,7 @@
 	var pre = '';
 	switch(info.type) {
 	case 'self':
-		
+
 		pre = (new symbol('self', symbols)).toC() + '->';
 		break;
 	case 'parent':
@@ -420,7 +420,7 @@
 		this.addMessage('_init', {
 			vars: {},
 			lines: init
-		});		
+		});
 		this.initmsgadded = true;
 	}
 }
@@ -461,7 +461,7 @@
 			}
 			if (this.slots[i].length == 1) {
 				slotdefs += '\tif (method_id == ' + this.slots[i][0][0] + ') { /* ' + this.slots[i][0][2] + '*/\n' +
-					'\t\t' + this.slots[i][0][1] + '\n' + 
+					'\t\t' + this.slots[i][0][1] + '\n' +
 					'\t}\n' +
 					'\treturn no_impl(method_id, num_params, (object *)self, args);\n}\n';
 			} else {
@@ -472,7 +472,7 @@
 				}
 				slotdefs += '\t\tdefault:\n' +
 					'\t\t\treturn no_impl(method_id, num_params, (object *)self, args);\n\t}\n}\n';
-					
+
 			}
 			metadef += this.name + '_slot_' + i;
 		} else {
@@ -544,7 +544,7 @@
 					lines: messages[i].args[2].toCLines(vars, true)
 				});
 			} else {
-				
+
 				throw new Error('Only import and import:from calls allowed in object context. ' + messages[i].name + 'with ' + messages[i].args.length + ' arguments found instead.');
 			}
 		} else {
@@ -615,6 +615,12 @@
 			'return &(str->header);'
 		]
 	});
+	int32.addMessage('isInteger?', {
+		vars: {},
+		lines: [
+			'return ' + toplevel.moduleVar('true') + ';'
+		]
+	});
 	int32.addMessage('hash', {
 		vars: {},
 		lines: [
@@ -776,7 +782,7 @@
 };
 
 function processUsedToplevel(toplevel)
-{	
+{
 	var alwaysused = ['true', 'false'];
 	var ret = '';
 	var modulenum = 0;
@@ -802,7 +808,7 @@
 			}
 		}
 	}
-		
+
 	for (var i = allused.length-1; i >= 0; i--) {
 		var symbol = allused[i];
 		debugprint('//---module', symbol, '(' + i +')--- compile');
@@ -857,7 +863,7 @@
 	}
 	for (var i = 0; i < args.length; ++i) {
 		var argname = args[i].toC();
-		
+
 		args[i] = (argname.indexOf('->') < 0 ? '\tobject * ' : '\t') + argname + ' = va_arg(args, object *);\n';
 	}
 	var compiled = []
@@ -871,7 +877,7 @@
 	if (exprs.length) {
 		exprs[exprs.length-1] = 'return (object *)(' + exprs[exprs.length-1] + ');';
 	}
-	
+
 	if (Object.keys(this.symbols.closedover).length) {
 		forwarddec += 'struct ' + this.name + '_env {\n';
 		if (this.symbols.needsParentEnv) {
@@ -885,7 +891,7 @@
 			}
 		}
 		forwarddec += '};\n'
-		
+
 		var myenvinit = '\t' + this.name + '_env * myenv = GC_MALLOC(sizeof(' + this.name + '_env));\n';
 		if (this.symbols.needsParentEnv) {
 			myenvinit += '\tmyenv->parent = env;\n';
@@ -895,7 +901,7 @@
 		var myenvinit = '';
 	}
 	forwarddec += 'object *' + this.name + ' (' + this.symbols.parentEnvType() + ' * env, uint32_t num_args, ...);\n';
-	
+
 	toplevelcode +=  'object * ' + this.name + ' ( ' + this.symbols.parentEnvType() + ' * env, uint32_t num_args, ...) {\n\tva_list args;\n' + myenvinit + '\tva_start(args, num_args);\n';
 	if (this.selftype) {
 		var selfvar = (new symbol('self', this.symbols)).toC();
@@ -904,10 +910,10 @@
 		} else {
 			toplevelcode += '\t' + selfvar  + ' = va_arg(args, ' + this.selftype + ' *);\n';
 		}
-		
+
 	}
 	toplevelcode += args.join('') + '\tva_end(args);\n' + exprs.join(';\n\t') + '\n}\n';
-	
+
 	if (this.selftype) {
 		return this.name;
 	} else {
@@ -919,7 +925,7 @@
 			}
 			debugprint('//' + this.name, 'has envvar:', envvar, 'num vars closed over:', Object.keys(this.symbols.closedover).length);
 			return 'make_lambda(' + envvar + ', (closure_func)' + this.name + ')';
-		} else {	
+		} else {
 			toplevelcode += 'lambda ' + this.name + '_obj = {{&lambda_meta, NULL}, NULL, lambda_' + mynum + '};\n';
 			return '((object *)&' + this.name + '_obj)';
 		}