Merge branch '2011-09-09-CxScript' of https://github.com/ChaiScript/ChaiScript into 2011-09-09-CxScript

This commit is contained in:
Jason Turner 2011-09-24 11:55:36 -06:00
commit e3350fe55f
5 changed files with 38 additions and 38 deletions

View File

@ -406,7 +406,7 @@ namespace chaiscript
m->add(fun(&dispatch::Dynamic_Object::get_attrs), "get_attrs"); m->add(fun(&dispatch::Dynamic_Object::get_attrs), "get_attrs");
m->add(fun(&dispatch::Dynamic_Object::get_attr), "get_attr"); m->add(fun(&dispatch::Dynamic_Object::get_attr), "get_attr");
m->eval("def Dynamic_Object::clone() { var new_o := Dynamic_Object(this.get_type_name()); for_each(this.get_attrs(), bind(fun(new_o, x) { new_o.get_attr(x.first) = x.second; }, new_o, _) ); return new_o; }"); m->eval("def Dynamic_Object::clone() { auto new_o := Dynamic_Object(this.get_type_name()); for_each(this.get_attrs(), bind(fun(new_o, x) { new_o.get_attr(x.first) = x.second; }, new_o, _) ); return new_o; }");
m->add(fun(&has_guard), "has_guard"); m->add(fun(&has_guard), "has_guard");
m->add(fun(&get_guard), "get_guard"); m->add(fun(&get_guard), "get_guard");

View File

@ -464,8 +464,8 @@ namespace chaiscript
if ( rhs.size() != this.size() ) { \ if ( rhs.size() != this.size() ) { \
return false; \ return false; \
} else { \ } else { \
var r1 = range(this); \ auto r1 = range(this); \
var r2 = range(rhs); \ auto r2 = range(rhs); \
while (!r1.empty()) \ while (!r1.empty()) \
{ \ { \
if (!eq(r1.front(), r2.front())) \ if (!eq(r1.front(), r2.front())) \

View File

@ -336,7 +336,7 @@ namespace chaiscript
m_engine.add_reserved_word("||"); m_engine.add_reserved_word("||");
m_engine.add_reserved_word(","); m_engine.add_reserved_word(",");
m_engine.add_reserved_word(":="); m_engine.add_reserved_word(":=");
m_engine.add_reserved_word("var"); m_engine.add_reserved_word("auto");
m_engine.add_reserved_word("return"); m_engine.add_reserved_word("return");
m_engine.add_reserved_word("break"); m_engine.add_reserved_word("break");
m_engine.add_reserved_word("true"); m_engine.add_reserved_word("true");

View File

@ -1542,7 +1542,7 @@ namespace chaiscript
size_t prev_stack_top = m_match_stack.size(); size_t prev_stack_top = m_match_stack.size();
if (Keyword("var")) { if (Keyword("auto")) {
retval = true; retval = true;
if (!Id(true)) { if (!Id(true)) {

View File

@ -54,8 +54,8 @@ def push_front(container, x) : call_exists(push_front_ref, container, x) { conta
def insert_at(container, pos, x) { container.insert_ref_at(pos, clone(x)); } \n\ def insert_at(container, pos, x) { container.insert_ref_at(pos, clone(x)); } \n\
# Returns the reverse of the given container\n\ # Returns the reverse of the given container\n\
def reverse(container) {\n\ def reverse(container) {\n\
var retval = new(container); \n\ auto retval = new(container); \n\
var r = range(container); \n\ auto r = range(container); \n\
while (!r.empty()) { \n\ while (!r.empty()) { \n\
retval.push_back(r.back()); \n\ retval.push_back(r.back()); \n\
r.pop_back(); \n\ r.pop_back(); \n\
@ -82,7 +82,7 @@ def retro::pop_front() { pop_back(this.m_range) } \n\
def retro::empty() { empty(this.m_range); } \n\ def retro::empty() { empty(this.m_range); } \n\
# Performs the second value function over the container first value\n\ # Performs the second value function over the container first value\n\
def for_each(container, func) : call_exists(range, container) { \n\ def for_each(container, func) : call_exists(range, container) { \n\
var t_range = range(container); \n\ auto t_range = range(container); \n\
while (!t_range.empty()) { \n\ while (!t_range.empty()) { \n\
func(t_range.front()); \n\ func(t_range.front()); \n\
t_range.pop_front(); \n\ t_range.pop_front(); \n\
@ -93,7 +93,7 @@ def back_inserter(container) { \n\
}\n\ }\n\
\n\ \n\
def contains(container, item, compare_func) : call_exists(range, container) { \n\ def contains(container, item, compare_func) : call_exists(range, container) { \n\
var t_range = range(container); \n\ auto t_range = range(container); \n\
while (!t_range.empty()) { \n\ while (!t_range.empty()) { \n\
if ( compare_func(t_range.front(), item) ) { return true; } \n\ if ( compare_func(t_range.front(), item) ) { return true; } \n\
t_range.pop_front(); \n\ t_range.pop_front(); \n\
@ -102,7 +102,7 @@ def contains(container, item, compare_func) : call_exists(range, container) { \n
} \n\ } \n\
def contains(container, item) { return contains(container, item, eq) } \n\ def contains(container, item) { return contains(container, item, eq) } \n\
def map(container, func, inserter) : call_exists(range, container) { \n\ def map(container, func, inserter) : call_exists(range, container) { \n\
var range = range(container); \n\ auto range = range(container); \n\
while (!range.empty()) { \n\ while (!range.empty()) { \n\
inserter(func(range.front())); \n\ inserter(func(range.front())); \n\
range.pop_front(); \n\ range.pop_front(); \n\
@ -110,14 +110,14 @@ def map(container, func, inserter) : call_exists(range, container) { \n\
} \n\ } \n\
# Performs the second value function over the container first value. Creates a new container with the results\n\ # Performs the second value function over the container first value. Creates a new container with the results\n\
def map(container, func) { \n\ def map(container, func) { \n\
var retval = new(container); \n\ auto retval = new(container); \n\
map(container, func, back_inserter(retval));\n\ map(container, func, back_inserter(retval));\n\
retval;\n\ retval;\n\
}\n\ }\n\
# Performs the second value function over the container first value. Starts with initial and continues with each element.\n\ # Performs the second value function over the container first value. Starts with initial and continues with each element.\n\
def foldl(container, func, initial) : call_exists(range, container){ \n\ def foldl(container, func, initial) : call_exists(range, container){ \n\
var retval = initial; \n\ auto retval = initial; \n\
var range = range(container); \n\ auto range = range(container); \n\
while (!range.empty()) { \n\ while (!range.empty()) { \n\
retval = (func(range.front(), retval)); \n\ retval = (func(range.front(), retval)); \n\
range.pop_front(); \n\ range.pop_front(); \n\
@ -130,9 +130,9 @@ def sum(container) { foldl(container, `+`, 0.0) } \n\
def product(container) { foldl(container, `*`, 1.0) } \n\ def product(container) { foldl(container, `*`, 1.0) } \n\
# Returns a new container with the elements of the first value concatenated with the elements of the second value\n\ # Returns a new container with the elements of the first value concatenated with the elements of the second value\n\
def concat(x, y) : call_exists(clone, x) { \n\ def concat(x, y) : call_exists(clone, x) { \n\
var retval = x; \n\ auto retval = x; \n\
var inserter = back_inserter(retval); \n\ auto inserter = back_inserter(retval); \n\
var range = range(y); \n\ auto range = range(y); \n\
while (!range.empty()) { \n\ while (!range.empty()) { \n\
inserter(range.front()); \n\ inserter(range.front()); \n\
range.pop_front(); \n\ range.pop_front(); \n\
@ -140,8 +140,8 @@ def concat(x, y) : call_exists(clone, x) { \n\
retval; \n\ retval; \n\
} \n\ } \n\
def take(container, num, inserter) : call_exists(range, container) { \n\ def take(container, num, inserter) : call_exists(range, container) { \n\
var r = range(container); \n\ auto r = range(container); \n\
var i = num; \n\ auto i = num; \n\
while ((i > 0) && (!r.empty())) { \n\ while ((i > 0) && (!r.empty())) { \n\
inserter(r.front()); \n\ inserter(r.front()); \n\
r.pop_front(); \n\ r.pop_front(); \n\
@ -150,12 +150,12 @@ def take(container, num, inserter) : call_exists(range, container) { \n\
} \n\ } \n\
# Returns a new container with the given number of elements taken from the container\n\ # Returns a new container with the given number of elements taken from the container\n\
def take(container, num) {\n\ def take(container, num) {\n\
var retval = new(container); \n\ auto retval = new(container); \n\
take(container, num, back_inserter(retval)); \n\ take(container, num, back_inserter(retval)); \n\
retval; \n\ retval; \n\
}\n\ }\n\
def take_while(container, f, inserter) : call_exists(range, container) { \n\ def take_while(container, f, inserter) : call_exists(range, container) { \n\
var r = range(container); \n\ auto r = range(container); \n\
while ((!r.empty()) && f(r.front())) { \n\ while ((!r.empty()) && f(r.front())) { \n\
inserter(r.front()); \n\ inserter(r.front()); \n\
r.pop_front(); \n\ r.pop_front(); \n\
@ -163,13 +163,13 @@ def take_while(container, f, inserter) : call_exists(range, container) { \n\
} \n\ } \n\
# Returns a new container with the given elements match the second value function\n\ # Returns a new container with the given elements match the second value function\n\
def take_while(container, f) {\n\ def take_while(container, f) {\n\
var retval = new(container); \n\ auto retval = new(container); \n\
take_while(container, f, back_inserter(retval)); \n\ take_while(container, f, back_inserter(retval)); \n\
retval;\n\ retval;\n\
}\n\ }\n\
def drop(container, num, inserter) : call_exists(range, container) { \n\ def drop(container, num, inserter) : call_exists(range, container) { \n\
var r = range(container); \n\ auto r = range(container); \n\
var i = num; \n\ auto i = num; \n\
while ((i > 0) && (!r.empty())) { \n\ while ((i > 0) && (!r.empty())) { \n\
r.pop_front(); \n\ r.pop_front(); \n\
--i; \n\ --i; \n\
@ -181,12 +181,12 @@ def drop(container, num, inserter) : call_exists(range, container) { \n\
} \n\ } \n\
# Returns a new container with the given number of elements dropped from the given container \n\ # Returns a new container with the given number of elements dropped from the given container \n\
def drop(container, num) {\n\ def drop(container, num) {\n\
var retval = new(container); \n\ auto retval = new(container); \n\
drop(container, num, back_inserter(retval)); \n\ drop(container, num, back_inserter(retval)); \n\
retval; \n\ retval; \n\
}\n\ }\n\
def drop_while(container, f, inserter) : call_exists(range, container) { \n\ def drop_while(container, f, inserter) : call_exists(range, container) { \n\
var r = range(container); \n\ auto r = range(container); \n\
while ((!r.empty())&& f(r.front())) { \n\ while ((!r.empty())&& f(r.front())) { \n\
r.pop_front(); \n\ r.pop_front(); \n\
} \n\ } \n\
@ -197,14 +197,14 @@ def drop_while(container, f, inserter) : call_exists(range, container) { \n\
} \n\ } \n\
# Returns a new container with the given elements dropped that match the second value function\n\ # Returns a new container with the given elements dropped that match the second value function\n\
def drop_while(container, f) {\n\ def drop_while(container, f) {\n\
var retval = new(container); \n\ auto retval = new(container); \n\
drop_while(container, f, back_inserter(retval)); \n\ drop_while(container, f, back_inserter(retval)); \n\
retval; \n\ retval; \n\
}\n\ }\n\
# Applies the second value function to the container. Starts with the first two elements. Expects at least 2 elements.\n\ # Applies the second value function to the container. Starts with the first two elements. Expects at least 2 elements.\n\
def reduce(container, func) : container.size() >= 2 && call_exists(range, container) { \n\ def reduce(container, func) : container.size() >= 2 && call_exists(range, container) { \n\
var r = range(container); \n\ auto r = range(container); \n\
var retval = r.front(); \n\ auto retval = r.front(); \n\
r.pop_front(); \n\ r.pop_front(); \n\
retval = func(retval, r.front()); \n\ retval = func(retval, r.front()); \n\
r.pop_front(); \n\ r.pop_front(); \n\
@ -216,8 +216,8 @@ def reduce(container, func) : container.size() >= 2 && call_exists(range, contai
} \n\ } \n\
# Returns a string of the elements in container delimited by the second value string\n\ # Returns a string of the elements in container delimited by the second value string\n\
def join(container, delim) { \n\ def join(container, delim) { \n\
var retval = ""; \n\ auto retval = ""; \n\
var range = range(container); \n\ auto range = range(container); \n\
if (!range.empty()) { \n\ if (!range.empty()) { \n\
retval += to_string(range.front()); \n\ retval += to_string(range.front()); \n\
range.pop_front(); \n\ range.pop_front(); \n\
@ -230,7 +230,7 @@ def join(container, delim) { \n\
retval; \n\ retval; \n\
} \n\ } \n\
def filter(container, f, inserter) : call_exists(range, container) { \n\ def filter(container, f, inserter) : call_exists(range, container) { \n\
var r = range(container); \n\ auto r = range(container); \n\
while (!r.empty()) { \n\ while (!r.empty()) { \n\
if (f(r.front())) { \n\ if (f(r.front())) { \n\
inserter(r.front()); \n\ inserter(r.front()); \n\
@ -240,12 +240,12 @@ def filter(container, f, inserter) : call_exists(range, container) { \n\
} \n\ } \n\
# Returns a new Vector which match the second value function\n\ # Returns a new Vector which match the second value function\n\
def filter(container, f) { \n\ def filter(container, f) { \n\
var retval = new(container); \n\ auto retval = new(container); \n\
filter(container, f, back_inserter(retval));\n\ filter(container, f, back_inserter(retval));\n\
retval;\n\ retval;\n\
}\n\ }\n\
def generate_range(x, y, inserter) { \n\ def generate_range(x, y, inserter) { \n\
var i = x; \n\ auto i = x; \n\
while (i <= y) { \n\ while (i <= y) { \n\
inserter(i); \n\ inserter(i); \n\
++i; \n\ ++i; \n\
@ -253,7 +253,7 @@ def generate_range(x, y, inserter) { \n\
} \n\ } \n\
# Returns a new Vector which represents the range from the first value to the second value\n\ # Returns a new Vector which represents the range from the first value to the second value\n\
def generate_range(x, y) { \n\ def generate_range(x, y) { \n\
var retval = Vector(); \n\ auto retval = Vector(); \n\
generate_range(x,y,back_inserter(retval)); \n\ generate_range(x,y,back_inserter(retval)); \n\
retval; \n\ retval; \n\
}\n\ }\n\
@ -262,8 +262,8 @@ def collate(x, y) { \n\
[x, y]; \n\ [x, y]; \n\
} \n\ } \n\
def zip_with(f, x, y, inserter) : call_exists(range, x) && call_exists(range, y) { \n\ def zip_with(f, x, y, inserter) : call_exists(range, x) && call_exists(range, y) { \n\
var r_x = range(x); \n\ auto r_x = range(x); \n\
var r_y = range(y); \n\ auto r_y = range(y); \n\
while (!r_x.empty() && !r_y.empty()) { \n\ while (!r_x.empty() && !r_y.empty()) { \n\
inserter(f(r_x.front(), r_y.front())); \n\ inserter(f(r_x.front(), r_y.front())); \n\
r_x.pop_front(); \n\ r_x.pop_front(); \n\
@ -272,7 +272,7 @@ def zip_with(f, x, y, inserter) : call_exists(range, x) && call_exists(range, y)
} \n\ } \n\
# Returns a new Vector which joins matching elements of the second and third value with the first value function\n\ # Returns a new Vector which joins matching elements of the second and third value with the first value function\n\
def zip_with(f, x, y) { \n\ def zip_with(f, x, y) { \n\
var retval = Vector(); \n\ auto retval = Vector(); \n\
zip_with(f,x,y,back_inserter(retval)); \n\ zip_with(f,x,y,back_inserter(retval)); \n\
retval;\n\ retval;\n\
}\n\ }\n\
@ -314,7 +314,7 @@ def string::trim() { \n\
ltrim(rtrim(this)); \n\ ltrim(rtrim(this)); \n\
} \n\ } \n\
def find(container, value, compare_func) : call_exists(range, container) && is_type(compare_func, "Function") { \n\ def find(container, value, compare_func) : call_exists(range, container) && is_type(compare_func, "Function") { \n\
var range = range(container); \n\ auto range = range(container); \n\
while (!range.empty()) { \n\ while (!range.empty()) { \n\
if (compare_func(range.front(), value)) { \n\ if (compare_func(range.front(), value)) { \n\
return range; \n\ return range; \n\