Skip to content
This repository has been archived by the owner on Jan 29, 2025. It is now read-only.

Commit

Permalink
[glsl-in] Fix function argument generation
Browse files Browse the repository at this point in the history
  • Loading branch information
JCapucho authored and kvark committed May 21, 2021
1 parent c22fa54 commit c526c85
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
24 changes: 17 additions & 7 deletions src/front/glsl/ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,13 @@ impl<'function> Context<'function> {
}

/// Add function argument to current scope
pub fn add_function_arg(&mut self, name: Option<String>, ty: Handle<Type>, mutable: bool) {
pub fn add_function_arg(
&mut self,
body: &mut Block,
name: Option<String>,
ty: Handle<Type>,
parameter: ParameterQualifier,
) {
let index = self.arguments.len();
self.arguments.push(FunctionArgument {
name: name.clone(),
Expand All @@ -285,16 +291,20 @@ impl<'function> Context<'function> {
});

if let Some(name) = name {
if let Some(current) = self.scopes.last_mut() {
let expr = self
.expressions
.append(Expression::FunctionArgument(index as u32));
let expr = self.add_expression(Expression::FunctionArgument(index as u32), body);
let mutable = parameter != ParameterQualifier::Const;
let load = if parameter.is_lhs() {
Some(self.add_expression(Expression::Load { pointer: expr }, body))
} else {
None
};

if let Some(current) = self.scopes.last_mut() {
(*current).insert(
name,
VariableReference {
expr,
load: None,
load,
mutable,
},
);
Expand Down Expand Up @@ -520,7 +530,7 @@ pub enum StructLayout {
Std140,
}

#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum ParameterQualifier {
In,
Out,
Expand Down
8 changes: 4 additions & 4 deletions src/front/glsl/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -577,7 +577,7 @@ impl<'source, 'program, 'options> Parser<'source, 'program, 'options> {
&mut arguments,
);

self.parse_function_args(&mut context, &mut parameters)?;
self.parse_function_args(&mut context, &mut body, &mut parameters)?;

let end_meta = self.expect(TokenValue::RightParen)?.meta;
meta = meta.union(&end_meta);
Expand Down Expand Up @@ -1540,19 +1540,19 @@ impl<'source, 'program, 'options> Parser<'source, 'program, 'options> {
fn parse_function_args(
&mut self,
context: &mut Context,
body: &mut Block,
parameters: &mut Vec<ParameterQualifier>,
) -> Result<()> {
loop {
if self.peek_type_name() || self.peek_parameter_qualifier() {
let qualifier = self.parse_parameter_qualifier();
let mutable = qualifier != ParameterQualifier::Const;
parameters.push(qualifier);
let ty = self.parse_type_non_void()?.0;

match self.expect_peek()?.value {
TokenValue::Comma => {
self.bump()?;
context.add_function_arg(None, ty, mutable);
context.add_function_arg(body, None, ty, qualifier);
continue;
}
TokenValue::Identifier(_) => {
Expand All @@ -1561,7 +1561,7 @@ impl<'source, 'program, 'options> Parser<'source, 'program, 'options> {
let size = self.parse_array_specifier()?;
let ty = self.maybe_array(ty, size);

context.add_function_arg(Some(name), ty, mutable);
context.add_function_arg(body, Some(name), ty, qualifier);

if self.bump_if(TokenValue::Comma).is_some() {
continue;
Expand Down

0 comments on commit c526c85

Please sign in to comment.