Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
node-sass
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
楚学文
node-sass
Commits
104793cd
Commit
104793cd
authored
Jul 11, 2012
by
Aaron Leung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finally figured out a decent method of resolving calls to built-in overloaded functions.
parent
cd19a7fc
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
4 deletions
+18
-4
eval_apply.cpp
eval_apply.cpp
+12
-1
functions.hpp
functions.hpp
+6
-3
No files found.
eval_apply.cpp
View file @
104793cd
...
@@ -290,10 +290,12 @@ namespace Sass {
...
@@ -290,10 +290,12 @@ namespace Sass {
case
Node
:
:
function_call
:
{
case
Node
:
:
function_call
:
{
// TO DO: default-constructed Function should be a generic callback (maybe)
// TO DO: default-constructed Function should be a generic callback (maybe)
// eval the function name in case it's interpolated
// eval the function name in case it's interpolated
expr
[
0
]
=
eval
(
expr
[
0
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
expr
[
0
]
=
eval
(
expr
[
0
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
string
name
(
expr
[
0
].
to_string
());
string
name
(
expr
[
0
].
to_string
());
if
(
!
f_env
.
count
(
name
))
{
if
(
!
f_env
.
count
(
name
))
{
// no definition available; just pass it through (with evaluated args)
Node
args
(
expr
[
1
]);
Node
args
(
expr
[
1
]);
for
(
size_t
i
=
0
,
S
=
args
.
size
();
i
<
S
;
++
i
)
{
for
(
size_t
i
=
0
,
S
=
args
.
size
();
i
<
S
;
++
i
)
{
args
[
i
]
=
eval
(
args
[
i
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
args
[
i
]
=
eval
(
args
[
i
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
...
@@ -301,7 +303,16 @@ namespace Sass {
...
@@ -301,7 +303,16 @@ namespace Sass {
return
expr
;
return
expr
;
}
}
else
{
else
{
return
apply_function
(
f_env
[
name
],
expr
[
1
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
// check to see if the function is primitive/built-in
Function
f
(
f_env
[
name
]);
if
(
f
.
primitive
&&
f
.
overloaded
)
{
stringstream
s
;
s
<<
name
<<
" "
<<
expr
[
1
].
size
();
f
=
f_env
[
s
.
str
()];
cerr
<<
"applying overloaded primitive ["
<<
s
.
str
()
<<
"]"
<<
endl
;
}
cerr
<<
"about to apply function "
<<
f
.
name
<<
endl
;
return
apply_function
(
f
,
expr
[
1
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
}
}
}
break
;
}
break
;
...
...
functions.hpp
View file @
104793cd
...
@@ -19,6 +19,7 @@ namespace Sass {
...
@@ -19,6 +19,7 @@ namespace Sass {
Node
parameters
;
Node
parameters
;
Node
definition
;
Node
definition
;
Primitive
primitive
;
Primitive
primitive
;
bool
overloaded
;
Function
()
Function
()
{
/* TO DO: set up the generic callback here */
}
{
/* TO DO: set up the generic callback here */
}
...
@@ -27,14 +28,16 @@ namespace Sass {
...
@@ -27,14 +28,16 @@ namespace Sass {
:
name
(
def
[
0
].
to_string
()),
:
name
(
def
[
0
].
to_string
()),
parameters
(
def
[
1
]),
parameters
(
def
[
1
]),
definition
(
def
),
definition
(
def
),
primitive
(
0
)
primitive
(
0
),
overloaded
(
false
)
{
}
{
}
Function
(
Function_Descriptor
d
,
Primitive
ip
,
Node_Factory
&
new_Node
)
Function
(
Function_Descriptor
d
,
Primitive
ip
,
Node_Factory
&
new_Node
,
bool
overloaded
=
false
)
:
name
(
d
[
0
]),
:
name
(
d
[
0
]),
parameters
(
new_Node
(
Node
::
parameters
,
"[PRIMITIVE FUNCTIONS]"
,
0
,
0
)),
parameters
(
new_Node
(
Node
::
parameters
,
"[PRIMITIVE FUNCTIONS]"
,
0
,
0
)),
definition
(
Node
()),
definition
(
Node
()),
primitive
(
ip
)
primitive
(
ip
),
overloaded
(
overloaded
)
{
{
size_t
len
=
0
;
size_t
len
=
0
;
while
(
d
[
len
+
1
])
++
len
;
while
(
d
[
len
+
1
])
++
len
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment