Added in bitwise operators

This commit is contained in:
Nathan Braswell
2016-04-19 18:39:01 -04:00
parent e2ff94a90b
commit 8d0996fb47
7 changed files with 18 additions and 6 deletions

View File

@@ -457,6 +457,7 @@ obj ast_transformation (Object) {
} else if (name == "lambda") {
return transform_lambda(node, scope, template_replacements)
} else if (name == "boolean_expression" || name == "and_boolean_expression"
|| name == "bitwise_or" || name == "bitwise_xor" || name == "bitwise_and"
|| name == "bool_exp" || name == "expression"
|| name == "shiftand" || name == "term"
|| name == "factor" || name == "unarad"
@@ -1096,7 +1097,7 @@ fun get_builtin_function(name: string, param_types: vector<*type>): *ast_node {
return ast_function_ptr(name, type_ptr(param_types, param_types[1]), vector<*ast_node>())
if (name == "[]")
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_decreased_indirection()), vector<*ast_node>())
if (name == "&")
if (name == "&" && param_types.size == 1)
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_increased_indirection()), vector<*ast_node>())
if (name == "\*" && param_types.size == 1)
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_decreased_indirection()), vector<*ast_node>())

View File

@@ -776,7 +776,8 @@ obj c_generator (Object) {
var parameters = node->function_call.parameters
if ( parameters.size == 2 && (func_name == "+" || func_name == "-" || func_name == "*" || func_name == "/"
|| func_name == "<" || func_name == ">" || func_name == "<=" || func_name == ">="
|| func_name == "==" || func_name == "!=" || func_name == "%"
|| func_name == "==" || func_name == "!=" || func_name == "%" || func_name == "^"
|| func_name == "|" || func_name == "&"
))
return code_triple("(") + generate(parameters[0], enclosing_object, enclosing_func, null<stack<pair<bool,stack<*ast_node>>>>(), false) + func_name + generate(parameters[1], enclosing_object, enclosing_func, null<stack<pair<bool,stack<*ast_node>>>>(), false) + string(")")
if ( parameters.size == 2 && (func_name == "||" || func_name == "&&")) {

View File

@@ -101,8 +101,6 @@ obj importer (Object) {
// the terminals have " around them, which we have to escape
remove_node(symbol("\"\\(\"", true), parse_tree)
remove_node(symbol("\"\\)\"", true), parse_tree)
/*remove_node(symbol("\"var\"", true), parse_tree)*/
// remove_node(symbol("\"fun\"", true), parse_tree)
remove_node(symbol("\"template\"", true), parse_tree)
remove_node(symbol("\"return\"", true), parse_tree)
remove_node(symbol("\"defer\"", true), parse_tree)
@@ -119,7 +117,7 @@ obj importer (Object) {
remove_node(symbol("def_nonterm", false), parse_tree)
remove_node(symbol("obj_nonterm", false), parse_tree)
remove_node(symbol("adt_nonterm", false), parse_tree)
remove_node(symbol("\"\\|\"", true), parse_tree)
/*remove_node(symbol("\"\\|\"", true), parse_tree)*/
collapse_node(symbol("case_statement_list", false), parse_tree)
collapse_node(symbol("opt_param_assign_list", false), parse_tree)