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
f032b652
Commit
f032b652
authored
May 30, 2012
by
Aaron Leung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented the @if directive.
parent
f000fd19
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
4 deletions
+33
-4
eval_apply.cpp
eval_apply.cpp
+20
-3
node.cpp
node.cpp
+2
-1
node.hpp
node.hpp
+11
-0
No files found.
eval_apply.cpp
View file @
f032b652
...
...
@@ -94,7 +94,7 @@ namespace Sass {
case
Node
:
:
root
:
{
for
(
size_t
i
=
0
,
S
=
expr
.
size
();
i
<
S
;
++
i
)
{
eval
(
expr
[
i
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
e
xpr
[
i
]
=
e
val
(
expr
[
i
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
}
return
expr
;
}
break
;
...
...
@@ -103,7 +103,7 @@ namespace Sass {
Environment
new_frame
;
new_frame
.
link
(
env
);
for
(
size_t
i
=
0
,
S
=
expr
.
size
();
i
<
S
;
++
i
)
{
eval
(
expr
[
i
],
prefix
,
new_frame
,
f_env
,
new_Node
,
ctx
);
e
xpr
[
i
]
=
e
val
(
expr
[
i
],
prefix
,
new_frame
,
f_env
,
new_Node
,
ctx
);
}
return
expr
;
}
break
;
...
...
@@ -297,7 +297,24 @@ namespace Sass {
case
Node
:
:
css_import
:
{
expr
[
0
]
=
eval
(
expr
[
0
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
return
expr
;
}
break
;
}
break
;
case
Node
:
:
if_directive
:
{
for
(
size_t
i
=
0
,
S
=
expr
.
size
();
i
<
S
;
i
+=
2
)
{
if
(
expr
[
i
].
type
()
!=
Node
::
block
)
{
// cerr << "EVALUATING PREDICATE " << (i/2+1) << endl;
Node
predicate_val
(
eval
(
expr
[
i
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
));
if
((
predicate_val
.
type
()
!=
Node
::
boolean
)
||
predicate_val
.
boolean_value
())
{
// cerr << "EVALUATING CONSEQUENT " << (i/2+1) << endl;
return
eval
(
expr
[
i
+
1
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
}
}
else
{
// cerr << "EVALUATING ALTERNATIVE" << endl;
return
eval
(
expr
[
i
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
}
}
}
break
;
default:
{
return
expr
;
...
...
node.cpp
View file @
f032b652
...
...
@@ -2,6 +2,7 @@
#include <algorithm>
#include "node.hpp"
#include "error.hpp"
#include <iostream>
namespace
Sass
{
using
namespace
std
;
...
...
@@ -15,7 +16,7 @@ namespace Sass {
if
(
type
()
!=
block
&&
type
()
!=
expansion
&&
type
()
!=
root
)
return
;
// size can change during flattening, so we need to call size() on each pass
for
(
size_t
i
=
0
;
i
<
size
();
++
i
)
{
if
(
at
(
i
).
type
()
==
expansion
)
{
if
(
(
at
(
i
).
type
()
==
expansion
)
||
(
at
(
i
).
type
()
==
block
)
)
{
Node
expn
(
at
(
i
));
if
(
expn
.
has_expansions
())
expn
.
flatten
();
ip_
->
has_statements
|=
expn
.
has_statements
();
...
...
node.hpp
View file @
f032b652
...
...
@@ -3,6 +3,7 @@
#include <cstring>
#include <string>
#include <vector>
#include <iostream>
namespace
Sass
{
using
namespace
std
;
...
...
@@ -146,6 +147,11 @@ namespace Sass {
expansion
,
arguments
,
if_directive
,
for_directive
,
each_directive
,
while_directive
,
variable
,
assignment
};
...
...
@@ -189,6 +195,8 @@ namespace Sass {
Token
token
()
const
;
Token
unit
()
const
;
bool
is_null_ptr
()
const
;
void
flatten
();
bool
operator
==
(
Node
rhs
)
const
;
...
...
@@ -273,6 +281,7 @@ namespace Sass {
case
Node
:
:
rule
:
case
Node
:
:
propset
:
has_statements
=
true
;
break
;
case
Node
:
:
ruleset
:
has_blocks
=
true
;
break
;
case
Node
:
:
if_directive
:
case
Node
:
:
expansion
:
has_expansions
=
true
;
break
;
case
Node
:
:
backref
:
has_backref
=
true
;
break
;
default
:
break
;
...
...
@@ -369,4 +378,6 @@ namespace Sass {
inline
Token
Node
::
token
()
const
{
return
ip_
->
value
.
token
;
}
inline
Token
Node
::
unit
()
const
{
return
ip_
->
unit
();
}
inline
bool
Node
::
is_null_ptr
()
const
{
return
!
ip_
;
}
}
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