Merge branch '2011-09-09-CxScript' of https://github.com/ChaiScript/ChaiScript into 2011-09-09-CxScript
This commit is contained in:
commit
e3350fe55f
@ -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");
|
||||||
|
@ -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())) \
|
||||||
|
@ -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");
|
||||||
|
@ -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)) {
|
||||||
|
@ -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\
|
||||||
|
Loading…
x
Reference in New Issue
Block a user