anchor.diff:  
               | _ -> failwithf "[GLSL] cannot assemble type %A" t 
   
  +    let assembleDeclaration (t : CType) (name : string) =
  +        match t with
  +            | CArray(et, len) ->
  +                sprintf "%s %s[%d]" (assembleType et) name len
  +            | t ->
  +                sprintf "%s %s" (assembleType t) name
  +        
  +
       let assembleParameter (p : CParameter) =
           let modifier =
               match p.modifier with
                   | CParameterModifier.In -> ""
                   | CParameterModifier.ByRef -> "inout "
   
  -        match p.ctype with
  -            | CArray(et, l) ->
  -                let t = assembleType et
  -                sprintf "%s%s %s[%d]" modifier t p.name l
  -
  -            | pt ->
  -                let t = assembleType pt
  -                sprintf "%s%s %s" modifier t p.name
  +        let decl = assembleDeclaration p.ctype p.name
  +        sprintf "%s%s" modifier decl
   
       let assembleFunctionSignature (s : CFunctionSignature) =
           let ret = s.returnType |> assembleType
  
positive.code: 
                  | CDeclare(v, r) ->
                      let! r = r |> Option.mapS assembleRExprS
                      match v.ctype with
                          | CArray(t, l) ->
                              let t = assembleType t
                              match r with
                                  | Some r -> return sprintf "%s %s[%d] = %s;" t v.name l r
                                  | None -> return sprintf "%s %s[%d];" t v.name l
  
                          | t ->
                              let t = assembleType t
                              match r with
                                  | Some r -> return sprintf "%s %s = %s;" t v.name r
                                  | None -> return sprintf "%s %s;" t v.name
  
                  | CWriteOutput(name, index, value) ->
                      let! name = parameterNameS ParameterKind.Output name
  
negative.code:         match d with
              | CStructDef(name, fields) ->
                  let fields = fields |> List.map (fun (t, n) -> sprintf "%s %s;" (assembleType t) n) |> String.concat "\r\n"
                  sprintf "struct %s\r\n{\r\n%s\r\n};" name (String.indent fields)
  
      let assemble (backend : Backend) (m : CModule) =
          let c = backend.Config
  